package com.atguigu.test.processor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

/**
 * @author zp
 * @version 1.0
 * @description: 自定义bean增强器
 * 增对某个类型的对象 实现功能的增强 提供了两个方法
 * postProcessBeforeInitialization 初始化之前增强
 * postProcessAfterInitialization  初始化之后增强
 *
 * BeanPostProcessor和BeanFactoryPostProcessor接口的区别
 * BeanPostProcessor是针对单个bean对象 做的增强 范围是在类对象层面给与类初始化之前和之后的功能增强
 * BeanFactoryPostProcessor的层面是增对于bean工厂的增强 所有的类在经过BeanFactory 对象生成的bean对象拦截增强
 * 作用范围和增对的对象都是不一样的，但是功能上是一致的 保留扩展功能；
 *
 * @date 2022/11/28 22:09
 */
@Component
@Slf4j
public class MyBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if("order".equals(beanName)){
            log.info("BeanPostProcessor 》》》 order 增强器 触发之前的逻辑");
        }
        if("a".equals(beanName)){
            log.info("BeanPostProcessor 》》》 a 增强器 触发之前的逻辑");
        }

        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if("order".equals(beanName)){
            log.info("BeanPostProcessor 》》》 order 增强器 触发之后的逻辑");
        }

        if("a".equals(beanName)){
            log.info("BeanPostProcessor 》》》 a 增强器 触发之后的逻辑");
        }
        return bean;
    }
}
